package com.cd.sendRequest.entity;

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 解析 curl 命令字符串，提取 URL、Header、Data、Method 等信息
 */
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 通用 curl 命令解析器
 * 支持多行、\ 换行、单双引号、多个 Cookie
 */
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class CurlParser {

    // 匹配 curl + URL（支持单/双引号）
    private static final Pattern URL_PATTERN = Pattern.compile("curl\\s+['\"](https?://[^'\"]+)['\"]", Pattern.CASE_INSENSITIVE);

    // 匹配 --request METHOD
    private static final Pattern METHOD_PATTERN = Pattern.compile("--request\\s+([A-Z]+)", Pattern.CASE_INSENSITIVE);

    // 匹配 --header 后面的内容（支持 'key: value' 和 "key: value"，包括 \" 转义）
    private static final Pattern HEADER_PATTERN = Pattern.compile("(-H|--header)\\s+((['\"]).*?\\3)",
            Pattern.CASE_INSENSITIVE | Pattern.DOTALL);
    // 匹配 data-raw
    private static final Pattern DATA_PATTERN = Pattern.compile("--data-raw\\s+((['\"]).*?\\2)", Pattern.CASE_INSENSITIVE | Pattern.DOTALL);

    public static CurlRequest parse(String curlCommand) {
        CurlRequest request = new CurlRequest();
        if (curlCommand == null || curlCommand.trim().isEmpty()) {
            return request;
        }

        // Step 1: 合并多行 \ 换行，并规范化空格
        String cleaned = curlCommand
                .replaceAll("\\\\\\s*\\r?\\n", " ")      // 移除 \\n 换行符
                .replaceAll("\\r?\\n", " ")              // 所有换行转空格
                .replaceAll("\\s+", " ")                 // 多个空白合并为一个
                .trim();

        System.out.println("清理后命令: " + cleaned); // 调试用：确认是否合并成功

        // Step 2: 提取 URL
        Matcher urlMatcher = URL_PATTERN.matcher(cleaned);
        if (urlMatcher.find()) {
            request.setUrl(urlMatcher.group(1));
        } else {
            System.err.println("❌ 未找到 URL");
        }

        // Step 3: 提取 method
        Matcher methodMatcher = METHOD_PATTERN.matcher(cleaned);
        if (methodMatcher.find()) {
            request.setMethod(methodMatcher.group(1));
        } else {
            request.setMethod("GET"); // 默认
        }

        // Step 4: 提取所有 --header
        Matcher headerMatcher = HEADER_PATTERN.matcher(cleaned);
        boolean foundHeader = false;
        while (headerMatcher.find()) {
            foundHeader = true;
            String quoted = headerMatcher.group(2); // 包括引号
            String content = quoted.substring(1, quoted.length() - 1); // 去掉首尾引号

            // 尝试按 : 分割 key/value
            int sep = content.indexOf(':');
            if (sep > 0) {
                String key = content.substring(0, sep).trim();
                String value = content.substring(sep + 1).trim();
                request.addHeader(key, value);
//            if (key.equals("cookie")){
//                System.out.println("cookie is "+key);
//            }
                // 如果是 Cookie，自动解析
//                if (key.equalsIgnoreCase("cookie") || key.equalsIgnoreCase("Cookie")) {
//                    request.addRawCookie(value); // 我们稍后统一处理
//                }
            } else {
                // 无冒号的 header（如 --header 'Authorization'）
                request.addHeader(content, "");
            }
        }
        if (!foundHeader) {
            System.err.println("❌ 未找到任何 --header");
        }

        // Step 5: 提取 data-raw
        Matcher dataMatcher = DATA_PATTERN.matcher(cleaned);
        if (dataMatcher.find()) {
            String quoted = dataMatcher.group(1);
            String body = quoted.substring(1, quoted.length() - 1); // 去引号
            request.setBody(body);
        }

        return request;
    }
}